package com.lin.tool;

import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * 使用类单例模式(一般在程序启动只加载一次),确保使用一个连接，可以同时用于多个线程。而Table和Admin在每个线程中自己实例化一个。
 *
 * 创建连接是一项繁重的操作。连接实现是线程安全的，因此客户端可以创建一次连接，并与不同的线程共享它。
 * 另一方面，Table和Admin实例是轻量级的，不是线程安全的。
 * 通常，每个客户端应用程序实例化一个连接，每个线程将获得自己的Table实例。不建议对Table和Admin进行缓存或池化。
 */


public class HBaseConnection {
    public static Connection connection = null;

/*    @Bean
    public Connection connection(){
        Connection connection = null;
        try {
            connection = ConnectionFactory.createConnection();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return connection;
    }*/

    static {
        try {
            connection = ConnectionFactory.createConnection();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void closeConn() throws IOException {
        connection.close();
    }

    public static void main(String[] args) throws IOException {
        System.out.println(HBaseConnection.connection);
        closeConn();
    }
}
